﻿/*
 * Created by SharpDevelop.
 * User: Lousabit
 * Date: 01/11/2011
 * Time: 14:57
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
using DAOFactory;
using Business_Entity;

namespace DAOFactory
{
	/// <summary>
	/// Description of DAODescuento.
	/// </summary>
	public class DAODescuento
	{
		public DAODescuento()
		{
		}
		
		public static void eliminarDescuento(int idDescuento){
			DAOHelper daoHelper = new DAOHelper(
				@"VENTAS_ELIMINAR_DESCUENTO_J 
				@idDescuento int");
			
			daoHelper.ExecuteNonQuery(idDescuento);
			
		}
		
		private static BEDescuento leerDescuento(SqlDataReader reader){
			int idDescuento = (int)reader["idDescuento"];
			int porcentaje = (int)reader["porcentaje"];
			DateTime fecIni = (DateTime)reader["fecIni"];
			DateTime fecFin = (DateTime)reader["fecFin"];
			int cantidadMinima = (int)reader["cantidadMinima"];
			
			int cantidadMaxima = -1;
			try{
				cantidadMaxima = (int)reader["cantidadMaxima"];
			}catch{}
			
			
			String descripcion = "XXX";
			try{
				descripcion = reader["descripcion"].ToString();
			}catch(Exception ex){}
			
			BEDescuento descuento = new BEDescuento(idDescuento);
			descuento.Descuento = porcentaje;
			descuento.Desde = fecIni;
			descuento.Hasta = fecFin;
			descuento.CantidadMinima = cantidadMinima;
			descuento.CantidadMaxima = cantidadMaxima;
			descuento.Descripcion = descripcion;
						
			return descuento;
		}
		
		public static BEDescuento getDescuentoByServicio(int idServicio, int idCategoria){
			DAOHelper daoHelper = new DAOHelper(
				@"VENTAS_BUSCAR_DESCUENTO_POR_SERVICIO_J 
				@idServicio int,
				@idCategoria int");
			
			SqlDataReader reader = daoHelper.ExecuteReader(idServicio, idCategoria);
			
			if(reader.Read()){
				BEDescuento descuento = leerDescuento(reader);
				
				reader.Close();
				
				return descuento;
			}
			
			reader.Close();
			return null;
		}
		
		public static BEDescuento getDescuentoByProducto(int idProducto, int idCategoria){
			DAOHelper daoHelper = new DAOHelper(
				@"VENTAS_BUSCAR_DESCUENTO_POR_PRODUCTO_J 
				@idProducto int,
				@idCategoria int");
			
			SqlDataReader reader = daoHelper.ExecuteReader(idProducto, idCategoria);
			
			if(reader.Read()){
				BEDescuento descuento = leerDescuento(reader);
				
				reader.Close();
				
				return descuento;
			}
			
			reader.Close();
			return null;
		}
		
		public static void insert(BEDescuento descuento){
			
			DAOHelper daoHelper = new DAOHelper(
				@"VENTAS_INSERTAR_DESCUENTO_J 
				@porcentaje int,
				@cantidadMinima int,
				@cantidadMaxima int,
				@fecIni date,
				@fecFin date,
				@descripcion nvarchar(60),
				@id int output");
						
			daoHelper.ExecuteNonQuery(
				descuento.Descuento,
				descuento.CantidadMinima,
				descuento.CantidadMaxima,
				descuento.Desde,
				descuento.Hasta,
				descuento.Descripcion,
				null);
						
			//insertar lineas
			int id = (int)daoHelper.getOutput("@id");
			
			DAOHelper helper;

			//descuentoxproducto
			helper = new DAOHelper(
			@"VENTAS_INSERTAR_DESCUENTOXPRODUCTO_J 
			@idDescuento int,
			@idProducto int");
			
			foreach(BEProducto p in descuento.Productos){
				helper.ExecuteNonQuery(id, p.Codigo);
			}
			
			//descuentoxservicio
			helper = new DAOHelper(
			@"VENTAS_INSERTAR_DESCUENTOXSERVICIO_J 
			@idDescuento int,
			@idServicio int");
			
			foreach(BEServicio s in descuento.Servicios){
				helper.ExecuteNonQuery(id, s.Codigo);
			}
			
			helper = new DAOHelper(
			@"VENTAS_INSERTAR_DESCUENTOXCATEGORIA_J 
			@idDescuento int,
			@idCategoria int");
			
			foreach(BECategoriaCliente s in descuento.Categorias){
				helper.ExecuteNonQuery(id, s.IdCategoria);
			}
			
		}
		
		public static List<BEDescuento> getDescuentos(int idDescuento, DateTime fechaIni, DateTime fechaFin){
			DAOHelper daoHelper = new DAOHelper(
				@"VENTAS_BUSCAR_DESCUENTOS_J
				@idDescuento int,
				@fecIni date,
				@fecFin date");
			SqlDataReader reader = daoHelper.ExecuteReader(
				idDescuento,
				fechaIni,
				fechaFin);
			
			List<BEDescuento> lista = new List<BEDescuento>();
			while(reader.Read()){
				BEDescuento d = leerDescuento(reader);				
				lista.Add(d);
			}
						
			reader.Close();
			
			
			return lista;
		}
		
		public static void getDescuentoCompleto(BEDescuento descuento){
			int id = descuento.Id;
			
			DAOHelper daoHelper;
			SqlDataReader reader;
			
			//PRODUCTOS
			daoHelper = new DAOHelper(
					@"VENTAS_BUSCAR_DESCUENTOXPRODUCTO_J 
					@idDescuento int");
			
			reader = daoHelper.ExecuteReader(id);
				
			while(reader.Read()){
				BEProducto p = new BEProducto();
				p.Codigo = (int)reader["idProducto"];
				p.Nombre = reader["Nombre"].ToString();
				descuento.agregarProducto(p);
			}				
			reader.Close();
		
			//SERVICIOS
			daoHelper = new DAOHelper(
				@"VENTAS_BUSCAR_DESCUENTOXSERVICIO_J 
				@idDescuento int");
			
			reader = daoHelper.ExecuteReader(id);
				
			while(reader.Read()){
				BEServicio s = new BEServicio();
				s.Codigo = (int)reader["idServicio"];
				s.Descripcion = reader["descripcion"].ToString();
				descuento.agregarServicio(s);
			}				
			reader.Close();
		
			//CATEGORIAS
			daoHelper = new DAOHelper(
				@"VENTAS_BUSCAR_DESCUENTOXCATEGORIA_J 
				@idDescuento int");
			
			reader = daoHelper.ExecuteReader(id);
				
			while(reader.Read()){
				BECategoriaCliente s = new BECategoriaCliente();
				s.IdCategoria = (int)reader["idCategoria"];
				s.Nombre = reader["nombre"].ToString();
				descuento.agregarCategoria(s);
			}				
			reader.Close();
			
			
		}
	}
}
